#include <bits/stdc++.h>
#define z 100 
struct Wages//教工工资补贴
{
	int basic;//基本工资
	int overtime;//加班费
	int night;//夜班费
	int rent;//房租
	int affair;//事假扣款
	int absenteeism;//旷工扣款
	int other;//其它扣款
	int nowyear;//现在的年 
	int nowmonth;//现在的月
	int nowday;//现在的日 
};
struct Faculty//教工信息
{
	char name[z];//姓名
	char gender;//性别
	char birth[z];//出生日期
	int Participation_year;//参加工作日期(年); 
	int Participation_month;//参加工作日期(月); 
	int Participation_day;//参加工作日期(日; 
	char sector[z];//所属部门
	char category[z];//人员类别
	int level;//技术等级
	char title[z];//技术职称
	char culturn[z];//文化程度
	char nation[z];//民族
	char native[z];//籍贯
	char addressp[z];//现住址
	int allowance;//岗位津贴
	int subsidies;//物价补贴
	int duty;//职务津贴
	int housing;//住房补贴
	int attenddanc_day;//教工的出勤日数
	int intjury;//公伤日数
	int maternbity_leave;//产假日数
	int sick_day;//病假日数
	int absenteeism_day;//旷工日数
	int affair_day;//事假日数
	int overtime_day;//加班日数
	int night_day;//夜班日数
	double realmoney;//实发工资
	double factor;//病假系数
	double sick;//病假扣款
};

struct Node
{
	void *data;
	Node *next;
};
Node *createHead();//建立头节点 
void readfile_F(Node* phead_F, char *filename_F);//读教工信息文件
void readfile_W(Node* phead_W, char *filename_W);//读教工工资补贴文件
void writefile_F(Node *phead_F, char *filename_F);//写教工信息文件
void writefile_W(Node *phead_W, char *filename_W);//写教工工资补贴文件
void menu(Node *phead_W, Node *phead_F);//菜单
//输入 
void menu1(Node *phead_W, Node *phead_F);//第一菜单
Node *addAll(Node *phead_F, void *(*pFunc)());//增加节点 
void *intput_W();//输入教工工资补贴数据 
void *intput_F();//输入教工信息数据 
//修改
void menu2(Node *phead_F);//第二菜单
void change(Node *phead_F, char *str);//修改教工信息数据 
void change_first(Node *phead_F);//修改第一个教工数据 
void change_late(Node *phead_F);//修改最后一个教工数据 
//删除 
void menu3(Node *phead_F);//第三菜单
void remove(Node *phead_F, char *str);//删除职工信息数据
void remove_first(Node *phead_F); //删除第一个教工数据 
void remove_late(Node *phead_F);//删除最后一个教工数据 
//查询 
void menu4(Node *phead_F);//第四菜单 
void find(Node *phead_F, char *str);//查询教工信息数据
void find_first(Node *phead_F);//查询第一个教工数据 
void find_late(Node *phead_F);//查询后一个教工数据 
//统计
void menu5(Node *phead_F);//第五菜单 
void statistics_sex(Node *phead_F);//按性别统计 
void statistics_nation(Node *phead_F, char *str);//按民族统计 
void statistics_sector(Node *phead_F, char *str);//按部门统计 
void statistics_culturn(Node *phead_F, char *str);//按文化程度统计
//插入
void menu6(Node *phead_F);//第六菜单
void insert(Node *phead_F, char *str);//插入到指定教工后
void insert_first(Node *phead_F);//插入到第一个教工前
void insert_late(Node *phead_F);//插入到后一个教工后
//输出
void menu7(Node *phead_W, Node *phead_F);//第七菜单 
void traversal(Node *phead, void (*pFunc)(Node *p));//遍历数据
void show_W(Node *p);//输出教工资补贴数据 
void show_F(Node *p);//输出教工信息数据
//计算 
void menu8(Node *phead_W, Node *phead_F);//第八菜单
void calculate(Node *p, Node *phead_W);//计算工资
void calculate_individual(Node *phead_W, Node *phead_F, char *str);//计算个月人工资
void calculate_sector(Node *phead_W, Node *phead_F, char *str);//计算部门月工资
void calculate_school(Node *phead_W, Node *phead_F);//计算全校月工资
//打印
void menu9(Node *phead_W, Node *phead_F);//第九菜单
void print_calculate(Node *phead_F, Node *phead_W);//打印工资计算表
void print_individual(Node *phead_F, Node *phead_W, char *str);//打印个人工资单
void print_sector(Node *phead_F, Node *phead_W, char *str);//打印部门工资单
void print_school(Node *phead_F, Node *phead_W);//打印工资汇总表
void freeNode(Node *phead);//释放数据